package com.mondo.financialwallet.domain.repository;


import com.mondo.financialwallet.domain.interactor.PostUserLogin;
import com.mondo.financialwallet.domain.interactor.PostUserRegister;
import com.mondo.financialwallet.domain.model.HoldProduct;
import com.mondo.financialwallet.domain.model.HoldProductProfit;
import com.mondo.financialwallet.domain.model.Product;
import com.mondo.financialwallet.domain.model.ProductOrder;
import com.mondo.financialwallet.domain.model.Response;
import com.mondo.financialwallet.domain.model.User;
import com.mondo.financialwallet.domain.model.UserAsset;

import java.io.File;
import java.util.List;

import io.reactivex.Observable;

public interface DefaultRepository {

    /**
     * 用户详情
     */
    Observable<Response<User>> userDetails();

    /**
     * 用户资产
     */
    Observable<Response<UserAsset>> userAssets();

    /**
     * 修改头像
     */
    Observable<Response<Void>> modifyAvatar(File avatar);

    /**
     * 注册
     */
    Observable<Response<Void>> register(PostUserRegister.Params params);

    /**
     * 登录
     */
    Observable<Response<User>> login(PostUserLogin.Params params);

    /**
     * 更改昵称
     */
    Observable<Response<Void>> alterNickname(String nickname);

    /**
     * 重置登录密码
     */
    Observable<Response<Void>> resetLoginPassword();

    /**
     * 更改登录密码
     */
    Observable<Response<Void>> alterLoginPassword();

    /**
     * 绑定新的手机号
     */
    Observable<Response<Void>> bindNewMobileNumber();

    /**
     * 绑定邮箱
     */
    Observable<Response<Void>> bindEmail();

    /**
     * 产品列表
     */
    Observable<Response<List<Product>>> productList();

    /**
     * 产品订单列表
     */
    Observable<Response<List<ProductOrder>>> productOrderList();

    /**
     * 持有产品列表
     */
    Observable<Response<List<HoldProduct>>> holdProductList();

    /**
     * 持有产品详情
     */
    Observable<Response<HoldProduct>> holdProductDetails(String orderNumber);

    /**
     * 持有产品收益
     */
    Observable<Response<List<HoldProductProfit>>> holdProductProfitData(String orderNumber);

    /**
     * 清算持有产品
     */
    Observable<Response<Void>> clearHoldProduct();
}
